package resource
{
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	import flash.utils.ByteArray;

	/**
	 * 加载的基类
	 * @author hyy
	 *
	 */
	public class Resource extends EventDispatcher
	{
		/**
		 * 加载地址
		 */
		public var url : String;
		/**
		 * 名称
		 */
		public var name : String;
		/**
		 * 优先级别
		 */
		public var priority : int = 0;
		/**
		 * 加载成功后回调
		 */
		protected var completeFun : Function;
		/**
		 * 报错后回调
		 */
		protected var errorFun : Function;

		protected var request : URLRequest;

		public var param : Object;
		/**
		 * 总共下载大小
		 * 默认是1000k
		 */
		public var bytesTotal : uint = 1000000;
		/**
		 * 当前加载大小
		 */
		public var bytesLoaded : uint;

		public function Resource(url : String, returnFun : Function, errorFun : Function = null)
		{
			this.url = url;
			this.request = new URLRequest(encodeURI(url));
			this.completeFun = returnFun;
			this.errorFun = errorFun;
		}

		/**
		 * 开始加载,需要手动调用load
		 *
		 */
		public function load(context : LoaderContext = null) : void
		{

		}

		/**
		 * 清除监听
		 *
		 */
		public function cleanListeners() : void
		{

		}

		/**
		 * 加载进度条
		 * @param evt
		 *
		 */
		protected function onProgressEvent(evt : ProgressEvent) : void
		{
			if(evt.bytesTotal > 0)
				bytesTotal = evt.bytesTotal;
			bytesLoaded = evt.bytesLoaded;
			this.dispatchEvent(evt);
		}

		protected function onDownloadError(evt : IOErrorEvent) : void
		{
			onFailed(evt.text);
		}

		protected function onDownloadSecurityError(evt : SecurityErrorEvent) : void
		{
			onFailed(evt.text);
		}

		/**
		 * 加载完成
		 * @param evt
		 *
		 */
		protected function onDownLoadComplete(evt : Event) : void
		{
			cleanListeners();
			completeFun(this);
		}

		/**
		 * 加载异常输出
		 * @param msg
		 *
		 */
		protected function onFailed(msg : String) : void
		{
			cleanListeners();

			if(errorFun != null)
				errorFun(this);
		}

		/**
		 * 停止下载
		 *
		 */
		public function stop() : void
		{

		}

		/**
		 * 销毁
		 *
		 */
		public function destory() : void
		{
			stop();
			cleanListeners();
			request = null;
			completeFun = null;
			errorFun = null;
		}

	}
}